package com.rankeiot.developer.domain;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.rankeiot.core.data.Kv;
import lombok.Data;
import org.sagacity.sqltoy.config.model.PKStrategy;
import org.sagacity.sqltoy.utils.StringUtil;

import java.util.List;


@Data
public class TableFieldMeta {
    private String id;
    // entity fieldName
    // private String fieldName;

    // 数据库表字段名称
    private String columnName;

    public String getField(){
        return StringUtil.toHumpStr(this.columnName,false);
    }
    // 对应数据库中的类型:java.sql.Types.xxx
    private int type;

    /**
     * 字段java类型(已经转小写)
     */
    //    private String fieldType;

    /**
     * 数据库对应的字段类型
     */
    private String nativeType;

    // 是否为空
//    private boolean nullable;

    /**
     * 字段是否是关键词
     */
    private boolean keyword = false;

    // 长度
    private int length;

    // 数字类型的总长度
    //private int precision;

    // 小数位长度
    private int scale;

    /**
     * 默认值
     */
    private String defaultValue;

    /**
     * 自增
     */
   // private boolean autoIncrement = false;

    /**
     * 是否主键
     */
    private boolean primaryKey=false;
    private boolean mandatory=false;
    private PKStrategy strategy;

    /**======== 前端属性=============****/
    private boolean searchCondition;
    private boolean visibleInList;
    private boolean visibleInForm;

    private String searchType;//eq,in,like,likeLeft,likeRight,contain,between,gt,ge,lt,le
    /**
     * 字段标题
     */
    private String title;
    /**
     * 是否单行显示
     */
    private boolean singleLine=false;

    /**
     * 显示格式
     */
    private String format;
    /**
     * 控件类型
     */
    private String controlType;
    /**
     * 备选值选项
     */
    private OptionsMeta options;
    /**
     * 验证项
     */
    private VerifyMeta verify;
    /**
     * 备注
     */
    private String memo;

    //所属分组
    private String viewGroup;

    public enum OptionsType{
        DICT,LIST,URL
    }

    @Data
    public static class OptionsMeta {

        private OptionsType type;

        private List<Kv> data;
    }

    public enum VerifyType{
        //固定类型，正则表达式
        FIXED,REGEX
    }
    @Data
    public static class VerifyMeta{
        private VerifyType verifyType;
        private String value;
    }
}
